home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 684 / 684.xpi / chrome / fireftp.jar / content / js / etc / treeHighlighter.js < prev    next >
Text File  |  2007-09-22  |  6KB  |  164 lines

  1. var treeHighlighter = {
  2.   valid              : null,
  3.   tree               : null,
  4.   treeBoxObject      : null,
  5.   selection          : null,
  6.   boxObject          : null,
  7.   column             : null,
  8.   mouseDownRow       : 0,
  9.   mouseDownPressed   : 0,
  10.   mouseDirection     : 0,
  11.   mousePreviousY     : 0,
  12.   previousMousePos   : -1,
  13.   dragSessionEnabled : false,
  14.  
  15.   mouseDown : function(event) {                                // record the start position
  16.     if (event.button != 0) {
  17.       return;
  18.     }
  19.  
  20.     var found = false;
  21.  
  22.     for (var x = 0; x < this.valid.length; ++x) {
  23.       var item = this.valid[x];
  24.       if (event.target == item.children) {
  25.         found              = true;
  26.         this.tree          = item.tree;
  27.         this.treeBoxObject = item.tree.treeBoxObject;
  28.         this.selection     = item.tree.view.selection;
  29.         this.boxObject     = item.children.boxObject;
  30.         this.column        = item.column;
  31.         break;
  32.       }
  33.     }
  34.  
  35.     if (!found) {
  36.       return;
  37.     }
  38.  
  39.     this.mouseDownPressed = true;
  40.     this.mousePreviousY   = event.pageY;
  41.  
  42.     var rowValueNeg = false;
  43.     var row = { };    var col = { };    var child = { };
  44.     this.treeBoxObject.getCellAt(event.pageX, event.pageY, row, col, child);
  45.  
  46.     if (row.value == -1) {                                     // this is if we click in the white space below the available rows
  47.       this.selection.clearSelection();
  48.       row.value   = this.tree.view.rowCount - 1;
  49.       rowValueNeg = true;
  50.     }
  51.  
  52.     this.mouseDownRow = row.value;
  53.  
  54.     if (this.column) {
  55.       var x = { };    var y = { };    var width = { };    var height = { };
  56.       this.treeBoxObject.getCoordsForCellItem(row.value, this.tree.columns[this.column], "text", x, y, width, height);
  57.       this.dragSessionEnabled = !rowValueNeg && event.pageX - this.boxObject.x < x.value + width.value; // drag enabled if mouse over name
  58.     }
  59.  
  60.     gCmdlogDoc.getElementById('mousePressed').innerHTML = "true";
  61.     setTimeout("treeHighlighter.totalHack()", 100);
  62.   },
  63.  
  64.   mouseMove : function(event, hack) {                          // change the selection depending on mouse movement
  65.     if (event && event.button != 0) {
  66.       return;
  67.     }
  68.  
  69.     if (hack) {                                                // XXX we need 'hack' to get mouse events from the log window
  70.       event = { pageY: hack, pageX: 0 };
  71.     } else {
  72.       gCmdlogDoc.getElementById('mouseY').innerHTML = this.previousMousePos;
  73.     }
  74.  
  75.     if (this.mouseDownPressed && !event.ctrlKey && !event.shiftKey && !this.dragSessionEnabled) {
  76.       if (this.mousePreviousY) {
  77.         this.mouseDirection = event.pageY - this.mousePreviousY > 0 ? true : false;
  78.       }
  79.  
  80.       this.mousePreviousY = event.pageY;
  81.  
  82.       if (event.pageY < this.boxObject.y) {                    // we need to do some scrolling
  83.         this.extendSelectionUpwards();
  84.         return;
  85.       } else if (event.pageY > this.boxObject.y + this.boxObject.height) {
  86.         this.extendSelectionDownwards();
  87.         return;
  88.       }
  89.  
  90.       var row = {};    var col = {};    var child = {};
  91.       this.treeBoxObject.getCellAt(event.pageX, event.pageY, row, col, child);
  92.  
  93.       if (row.value == -1) {                                   // this is if we are in the white space below the available rows
  94.         row.value = this.treeBoxObject.getLastVisibleRow();
  95.       }
  96.  
  97.       this.selection.rangedSelect(this.mouseDownRow, row.value, false);
  98.     }
  99.   },
  100.  
  101.   mouseUp : function(event) {                                  // finish up
  102.     if (event && event.button != 0) {
  103.       return;
  104.     }
  105.  
  106.     this.mouseDownPressed = false;
  107.     gCmdlogDoc.getElementById('mousePressed').innerHTML = "false";
  108.   },
  109.  
  110.   extendSelectionUpwards : function() {                        // scrolling up while highlighting files
  111.     if (this.mouseDirection || !this.mouseDownPressed) {
  112.       return;
  113.     }
  114.  
  115.     if (this.treeBoxObject.getFirstVisibleRow() == 0) {        // we've hit the top of the list
  116.       this.selection.rangedSelect(this.mouseDownRow, this.treeBoxObject.getFirstVisibleRow(), false);
  117.       return;
  118.     }
  119.  
  120.     this.treeBoxObject.ensureRowIsVisible(this.treeBoxObject.getFirstVisibleRow() - 1);
  121.     this.selection.rangedSelect(this.mouseDownRow, this.treeBoxObject.getFirstVisibleRow(), false);
  122.  
  123.     if (this.mouseDownPressed) {
  124.       setTimeout("treeHighlighter.extendSelectionUpwards()", 100);
  125.     }
  126.   },
  127.  
  128.   extendSelectionDownwards : function() {                      // scrolling down while highlighting files
  129.     if (!this.mouseDirection || !this.mouseDownPressed) {
  130.       return;                                                  // we've hit the bottom of the list
  131.     }
  132.  
  133.     if (this.tree.view.rowCount - 1 < this.treeBoxObject.getLastVisibleRow()) {
  134.       this.selection.rangedSelect(this.mouseDownRow, this.treeBoxObject.getLastVisibleRow(), false);
  135.       return;
  136.     }
  137.  
  138.     this.treeBoxObject.ensureRowIsVisible(this.treeBoxObject.getLastVisibleRow() + 1);
  139.     this.selection.rangedSelect(this.mouseDownRow, this.treeBoxObject.getLastVisibleRow(), false);
  140.  
  141.     if (this.mouseDownPressed) {
  142.       setTimeout("treeHighlighter.extendSelectionDownwards()", 100);
  143.     }
  144.   },
  145.                                                                // TOTAL HACK XXX - this sucks!
  146.   totalHack : function() {                                     // sigh, we need mouse move events to be received
  147.     if (this.mouseDownPressed) {                               // from the log window for treehighlighting
  148.       if (gCmdlogDoc.getElementById('mousePressed').innerHTML == "false") {
  149.         this.mouseUp(null);
  150.         return;
  151.       }
  152.  
  153.       var newMousePos = parseInt(gCmdlogDoc.getElementById('mouseY').innerHTML);
  154.  
  155.       if (newMousePos && this.previousMousePos != newMousePos) {
  156.         this.previousMousePos = newMousePos;
  157.         this.mouseMove(null, newMousePos + this.boxObject.y);
  158.       }
  159.  
  160.       setTimeout("treeHighlighter.totalHack()", 100);
  161.     }
  162.   }
  163. };
  164.